#ifndef TIMER_H_
#define TIMER_H_

#include "../../SAMA_Function.h"

typedef enum {
	TIMER_BASE,				//< 定时器
	TIMER_SINGLE_PULSE,		//< 单脉冲
	TIMER_LAG_SD,			//< 滞后置位
	TIMER_LAG_RD,			//< 滞后复位
	TIMER_LAG_SD_HOLD,		//< 滞后置位保持
}TIMER_WORK_t;

/*模块可调参数结构体*/
typedef struct {
	TIMER_WORK_t type;		//< 定时器工作方式
}TIMER_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	bool Sd_Last;			//< 上一时刻置位信号
	bool Rd_Last;			//< 上一时刻复位信号
	bool Count_Time_Flg;	//< 计时标志位，该位置1，开始计时
	bool TIMER_LAG_RD_Flag;
	bool TIMER_LAG_SD_HOLD_Flag;
	float LeastTime;	
	bool LastDO;
}TIMER_Sta_t;


/*模块参数结构体定义*/
struct TIMER_T
{
	Model_Base_t Base;		//< 模块基本参数结构体
	TIMER_Par_t Par;		//< 模块可调参数结构体
	TIMER_Sta_t Sta;		//< 模块运算中间参数结构体
};


extern TIMER_T* TIMER_t;

/*函数*/
bool CALCU_SAMA(TIMER)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);	//< SAMA运算函数
int BC_PARA(TIMER)(Model_Base_t* arg, void** Data);											//< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(TIMER)(Model_Base_t* arg, void** Data);											//< 备份SAMA运算中间参数
int ANA_STA(TIMER)(Model_Base_t* arg, void** Data);											//< 解析备份的SAMA运算中间参数
int CHANGE_PAR(TIMER)(Model_Base_t* arg, void** Data);											//< 在线修改模块参数函数
void INIT_STAPAR(TIMER)(Model_Base_t* arg);													//< 初始化模块运算中间参数


#endif
